
// 请求签名、请求拦截、数据解析

import Request from './request'
import md5 from 'md5'
import CryptoJS from 'crypto-js'
import { ENUM } from '@/common/enum.js'
import Common from '@/common/common.js'
const http = new Request()
const encrypt = 2

// 全局配置 会被自定义配置覆盖
http.setConfig((config) => {
	// #ifdef MP-WEIXIN
	config.baseUrl = ENUM.HTTP_BASE_URL
	// #endif
	config.header['content-type'] = 'application/x-www-form-urlencoded; charset=UTF-8'
	return config
})

// 验证器 只有状态码为200通过
http.validateStatus = (statusCode) => {
	return statusCode === 200
}

// 请求拦截器
http.interceptor.request((config, cancel) => {
	// config.header = {
	// 	...config.header,
	// 	version,
	// 	device,
	// 	client,
	// 	cloudid,
	// 	token,
	// 	encrypt,
	// 	custom,
	// 	sign,
	// 	time
	// }
	
	return config
})

// 响应拦截器
http.interceptor.response((response) => {
	uni.hideLoading()
	// 处理上传逻辑
	if (response.config.method === "UPLOAD") {
		response.data = JSON.parse(response.data)
	}
	// 后台约定code：1成功 其他状态码失败或异常 401需要登录或token过期
	let res = response.data
	let code = res.code

	if (code === 1) {
		return res
	} else if (code === 401) {
		console.error(response.config.url + ' ==> 401');
		// 重新登录
		uni.setStorageSync(ENUM.STORAGE_TOKEN_KEY, '')
		Common.getUserInfo()
	} else {
		uni.showToast({
			icon: 'none',
			title: res.msg
		})
		return Promise.reject(response.config.url + ' ==> ' + res.msg)
	}
}, (response) => {
	uni.hideLoading()
	// 请求错误
	// uni.showToast({
	// 	icon: 'none',
	// 	title: "网络错误，请稍后再试"
	// })
	return
})

export default http
